
//巡线传感器引脚初始化
void grayscale_init(){
  for(int i=0;i<sensor_pin_number;i++){
    pinMode(grayscale_sensor_pin[i], INPUT);
  }
}

//获取并打印巡线传感器数值
void get_grayscale_data_print(){
  for(int i=0;i<sensor_pin_number;i++){
    grayscale_data[i] = digitalRead(grayscale_sensor_pin[i]);
    Serial.print(grayscale_sensor_pin[i]);Serial.print(":");
    Serial.print(grayscale_data[i]);Serial.print("  |  ");
  }
  Serial.println();
}


/******************************************************************************
A9       A10     位运算           分析
0         0       0     A10(右侧没碰到黑线)没触发,A9(左侧没碰到黑线)没触发,小车后退
0         1       1     A10(右侧碰到黑线)触发,A9(左侧没碰到黑线)没触发,小车右转
1         0       2     A10(右侧没碰到黑线)没触发,A9(左侧碰到黑线)触发,小车左转
1         1       3     A10(右侧碰到黑线)触发,A9(左侧碰到黑线)触发,小车前进
*******************************************************************************/
int get_grayscale_data(){
  int sum = 0;
  for(int i=0;i<sensor_pin_number;i++){
    sum |= (digitalRead(grayscale_sensor_pin[i]) << i);
  }
  //Serial.println(sum);
  return sum;
}

void tracking(){
  int data = get_grayscale_data(); //获取获取巡线传感器移位相加操作后的数值
  switch(data){
    case 0: { car_back(); } break;   //表示小车左右两个都没有触发，小车后退
    case 1: { car_right(); } break;  //表示小车右侧碰到黑线，左侧没碰到黑线，小车右转
    case 2: { car_left(); } break;   //表示小车左侧碰到黑线，右侧没碰到黑线，小车左转
    case 3: { car_forward(); } break;//表示小车左右两侧都碰到黑线，小车前进。
  }
}

//串口监视器打印两个传感器触发值
void print_gyrascale_data(){
  for(int i=0;i<sensor_pin_number;i++){
    Serial.print(grayscale_sensor_pin[i]);Serial.print(":");
    Serial.print(digitalRead(grayscale_sensor_pin[i]));
    Serial.print(" | ");
  }Serial.println();
}
